home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 September / Macworld (1998-09).dmg / Shareware World / Info / For Developers / MacZoop 1.8.3 / Required Classes / Z Headers / ZWindow.h < prev    next >
Text File  |  1998-07-06  |  8KB  |  253 lines

  1. /*************************************************************************************************
  2. *
  3. *
  4. *            MacZoop - "the framework for the rest of us"         
  5. *
  6. *
  7. *
  8. *            ZWindow.h        -- the window object
  9. *
  10. *
  11. *
  12. *
  13. *
  14. *            © 1996, Graham Cox
  15. *
  16. *
  17. *
  18. *
  19. *************************************************************************************************/
  20.  
  21. #pragma once
  22.  
  23. #ifndef __ZWINDOW__
  24. #define    __ZWINDOW__
  25.  
  26. #ifndef __ZCOMMANDER__
  27. #include    "ZCommander.h"
  28. #endif
  29.  
  30. class    ZUndoTask;
  31. class    ZWindowManager;
  32.  
  33. #include    "ProjectSettings.h"
  34. #include    <drag.h>
  35.  
  36. #if _USE_NAVIGATION_SERVICES
  37. #include    <Navigation.h>
  38. extern NavEventUPP        gNavEventHandler;
  39. #endif
  40.  
  41. // set up streaming stuff:
  42.  
  43. DEFINECLASSID( ZWindow, 'zwin' );
  44.  
  45. // class definition:
  46.  
  47. class    ZWindow : public ZCommander
  48. {
  49.     friend class ZWindowManager;
  50.     
  51. protected:
  52.     Rect        sizeRect;            // min and max sizes for window
  53.     WindowPtr    macWindow;            // the mac window associated with this object
  54.     short        windID;                // res ID of 'WIND' template
  55.     Boolean        dirty;                // TRUE if window needs to be saved
  56.     Boolean        isNamed;            // TRUE if window has a name other than "untitled"
  57.     Boolean        stationeryFile;        // TRUE if file opened was  stationery (template)
  58.     FSSpec        macFile;            // the file that corresponds to this window
  59.     OSType        macFType;            // file type last opened
  60.     Boolean        printable;            // TRUE if this window can be printed (default FALSE)
  61.     Boolean        isPrinting;            // TRUE if draw operation is to printer
  62.     Boolean        floating;            // TRUE if this is a floating window
  63.     Boolean        disableAutoClose;    // if TRUE, this window is skipped during Quit or Close All
  64.     Rect        zoomSource;            // global rect where window was zoomed from
  65.     
  66. public:
  67.     ZWindow( ZCommander* aBoss, const short windowID );
  68.     ZWindow();
  69.     virtual ~ZWindow();
  70.  
  71. // initialisation (MUST be called after construction)    
  72.     virtual void    InitZWindow();
  73.     
  74. // drawing and clicking
  75.     virtual void    Focus();
  76.     virtual void    Draw();
  77.     virtual void    DrawGrow();
  78.     virtual void    DrawContent();
  79.     virtual void    Click( const Point mouse, const short modifiers);
  80.     virtual void    AdjustCursor( const Point mouse, const short modifiers);
  81.     virtual void    PostRefresh();
  82.     virtual Boolean    ClickInSamePlace( const Point click1, const Point click2 );
  83.     virtual void    SetDefaultColours();
  84.     
  85. // top-level call to do an update
  86.  
  87.     virtual void    PerformUpdate();
  88.     
  89. // window state manipulation
  90.     virtual void    Hide();
  91.     virtual void    Show();
  92.     virtual void    Select();
  93.     virtual void    Activate();
  94.     virtual void    Deactivate();
  95.     virtual Boolean    Close( const short phase );
  96.     virtual Boolean    CloseSubsidiaryWindows( const short phase );
  97.     
  98. // command handling
  99.     virtual void    HandleCommand( const long aCmd );
  100.     virtual void    HandleCommand( const short menuID, const short itemID );
  101.     virtual void    UpdateMenus();
  102.     virtual void    SetTask( ZUndoTask* aTask );
  103.     
  104. // sizing and zooming    
  105.     virtual void    SetSizeRect( const Rect& szRect );
  106.     virtual void    GetSizeRect( Rect* szRect );
  107.     virtual void    Zoom( const short partCode );
  108.     virtual void    PlaceAt( const short hGlobal, const short vGlobal );
  109.     virtual void    Place();
  110.     virtual void    SetSize( const short width, const short height, const Boolean reDraw );
  111.     virtual void    SetSize( const short width, const short height ) { SetSize(width, height, TRUE); };
  112.     virtual void    SetStdZoomRect( const Rect& aRect );
  113.     virtual void    SetUserZoomRect( const Rect& aRect );
  114.     virtual void    GetIdealWindowZoomSize( Rect* idealSize );
  115.     virtual void    WindowResized() {};
  116.     
  117. // file handling
  118.     virtual Boolean    Save( const Boolean forceSaveAs = FALSE );
  119.     virtual void    SaveFile();
  120.     virtual void    Revert();
  121.     virtual void    SetFile( const FSSpec& aFile );
  122.     virtual void    OpenFile( const OSType aFileType, Boolean isStationery = FALSE );
  123.     virtual void    PickFile( StandardFileReply* macReply );
  124.     
  125. #if _USE_NAVIGATION_SERVICES
  126.     virtual void    PickFile( NavReplyRecord* navReply );
  127. #endif
  128.     
  129. // print handling
  130.     virtual void    CalcPages( const Rect& paperRect, short* pagesH, short* pagesV );
  131.     virtual void    PrintOnePage( const short pageNum, const Rect& paperRect );
  132.     virtual void    PrintingStarting() { isPrinting = TRUE; };
  133.     virtual void    PrintingFinishing() { isPrinting = FALSE; };
  134.     
  135.     inline    Boolean    IsPrintable() { return printable; };
  136.     
  137. // other info
  138.     virtual void    SetTitle( Str255 aTitle );
  139.     virtual void    GetName( Str255 name );
  140.     virtual void    GetContentRect( Rect* contents );
  141.     virtual void    GetBounds( Rect* aBounds ) { GetContentRect( aBounds ); };
  142.     virtual Boolean    IsVisible();
  143.     virtual Boolean    IsActive();
  144.  
  145. // positioning and frame info:    
  146.     virtual short    GetTitleBarHeight();
  147.     virtual void    GetStructureRegion( RgnHandle aRgn );
  148.     virtual void    GetContentRegion( RgnHandle aRgn );
  149.     virtual void    GetStructureFrameBorder( Rect* aRect );
  150.     virtual void    GetGlobalPosition( short* hGlobal, short* vGlobal );
  151.  
  152. // saving and restoring window position as resource in file or prefs:
  153.     
  154.     virtual void    SavePosition( short id = 0 );
  155.     virtual void    RestorePosition( short id = 0 );
  156.  
  157. // various inline getters & setters    
  158.     inline     WindowPtr    GetMacWindow(){ return macWindow; };
  159.     inline    Boolean        Floats() { return floating; };
  160.     inline    Boolean        NoAutoClose() { return disableAutoClose; };
  161.     inline    void        GetFileSpec( FSSpec* aSpec ) { *aSpec = macFile; };
  162.     inline  Boolean        IsDirty() { return dirty; };
  163.     inline    void        SetDirty( Boolean dState ) { dirty = dState; };
  164.     inline  OSType        GetFileType() { return macFType; };
  165.     
  166. // streaming:
  167.  
  168.     virtual void        WriteToStream( ZStream* aStream );
  169.     virtual void        ReadFromStream( ZStream* aStream );
  170.  
  171. // drag and drop support:
  172.     
  173.     virtual void        Drag( const Point startPt );
  174.     virtual void        Drop( const OSType flavour, const Ptr data, const long dataSize ) {};
  175.     virtual void        DragHilite( const Boolean state, const DragReference theDrag );
  176.     virtual Boolean        AcceptsFlavour( const OSType aFlavour ) { return TRUE; };
  177.     virtual RgnHandle    MakeDragRgn();
  178.     virtual void        MakeDragData( const DragReference theDrag ) {};
  179.     
  180. // lowest level d+d handlers:
  181.  
  182.     virtual void        DragDispatch( const DragTrackingMessage theMessage, const DragReference theDrag);
  183.     virtual void        DropHandler( const DragReference theDrag );
  184.  
  185. protected:
  186.     
  187. // d+d installers
  188.     
  189.     virtual void        InstallDragHandlers();
  190.     virtual void        RemoveDragHandlers();
  191.     
  192. // tracking handler methods
  193.     
  194.     virtual void        EnteredHandler( const DragReference theDrag) {};
  195.     virtual void        EnteredWindow( const DragReference theDrag);
  196.     virtual void        InWindow( const DragReference theDrag) {};
  197.     virtual void        LeftWindow( const DragReference theDrag);
  198.     virtual void        LeftHandler( const DragReference theDrag) {};
  199.  
  200. // constructing mac windows:
  201.     
  202.     virtual void        MakeMacWindow( const short windID );
  203.     virtual void        MakeMacWindow( Rect* aRect, Str255 title, Boolean visible = FALSE, short varCode = 0, Boolean hasCloseBox = FALSE, void* userData = NULL );
  204. };
  205.  
  206.  
  207.  
  208. #define            kNoFile                    -9999
  209. #define            kRevertConfirmAlertID    135
  210.  
  211. #define            kMsgWindowClosing        'winz'
  212.  
  213.  
  214. /*
  215.  
  216.      ZWindows manage Mac windows. The refCon of a macWindow in Object MacZapp is the object
  217.     reference. This class handles all types of non-dialog windows. For dialogs, use ZDialog,
  218.     which is a subclass of this. A ZWindow is really equivalent to a document, since it has
  219.     methods for reading and writing its contents to files. However, you can ignore this
  220.     facility for non-document windows. This approach simplifies the framework, since you don't
  221.     need separate classes for different types of windows.
  222.     
  223. */
  224.  
  225.  
  226. #define        kInfinityWindoidDefinition    128
  227.  
  228. // structure of "WIND' resource- we need to take a peek here ourselves to determine if the
  229. // window is a floater or not
  230.  
  231. #if PRAGMA_ALIGN_SUPPORTED
  232. #pragma options align=mac68k
  233. #endif
  234.  
  235.  
  236. typedef struct
  237. {
  238.     Rect        bounds;
  239.     short        procID;
  240.     short        filler;
  241.     Boolean        visible;
  242.     Boolean        goAway;
  243.     long        refCon;
  244.     Str255        title;
  245. }
  246. WindTemplate, *WindTemplatePtr, **WindTemplateHdl;
  247.  
  248.  
  249. #if PRAGMA_ALIGN_SUPPORTED
  250. #pragma options align=reset
  251. #endif
  252.  
  253. #endif